package model;

import java.sql.Date;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import entidade.Comovime;

@SuppressWarnings("serial")
public class ComovimeTableModel extends AbstractTableModel {
	
	private final int COL_CODIGO = 0;
	private final int COL_DATA = 1;
	private final int COL_CONTA = 2;
	private final int COL_HISTORICO = 3;
	private final int COL_OPERADOR = 4;
	private final int COL_VALOR = 5;
	
	private List<Comovime> movimentos;
	private DecimalFormat df;
	
	public ComovimeTableModel(){
		movimentos = new ArrayList<>();
		df = new DecimalFormat("###,##0.00");
	}
	
	public ComovimeTableModel(List<Comovime> lista){
		this();
		movimentos.addAll(lista);
		df = new DecimalFormat("###,##0.00");
	}
	
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 6;
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return movimentos.size();
	}
	
	@Override
	public String getColumnName(int column) {
		// qual o nome da coluna
		switch (column) {
		case COL_CODIGO:
			return "C\u00F3digo";
		case COL_DATA:
			return "Data";
		case COL_CONTA:
			return "Conta";
		case COL_HISTORICO:
			return "Hist�rico";
		case COL_OPERADOR:
			return "Operador";
		case COL_VALOR:
			return "Valor";
		}
		return "";
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// retorna a classe que representa a coluna
		switch (columnIndex) {
		case COL_CODIGO:
			return Integer.class;
		case COL_DATA:
			return Date.class;
		case COL_CONTA:
			return String.class;
		case COL_HISTORICO:
			return String.class;
		case COL_OPERADOR:
			return String.class;
		case COL_VALOR:
			return String.class;
		}
		return String.class;
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		// pega o produto da linha
		Comovime c = movimentos.get(rowIndex);

		// verifica qual valor deve ser retornado
		switch (columnIndex) {
		case COL_CODIGO:
			return c.getCodigo();
		case COL_DATA:
			return c.getData();
		case COL_CONTA:
			return c.getConta().getNumero();
		case COL_HISTORICO:
			return c.getHistorico();
		case COL_OPERADOR:
			return c.getOperador();
		case COL_VALOR:
			return df.format(c.getValor());
		}
		return "";
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// pega o produto da linha
		Comovime c = movimentos.get(rowIndex);

		// verifica qual valor vai ser alterado
		switch (columnIndex) {
		case COL_CODIGO:
			c.setCodigo(Integer.parseInt(aValue.toString()));
		case COL_DATA:
			c.setData(Date.valueOf(aValue.toString()));
		case COL_CONTA:
			c.getConta().setNumero(aValue.toString());
		case COL_HISTORICO:
			c.setHistorico(aValue.toString());
		case COL_OPERADOR:
			c.setOperador(aValue.toString());
		case COL_VALOR:
			c.setValor(Float.valueOf(aValue.toString()));
		}

		// avisa que os dados mudaram
		fireTableDataChanged();
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// no nosso caso todas v�o ser edit�veis, entao retorna true pra todas
		return false;
	}

	public Comovime get(int pos) {
		return movimentos.get(pos);
	}

}
